{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Simulator\n",
    "\n",
    "This notebook is used to generate simulated traffic of a nominal state and a broken slave."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "can_generated  capture.csv\r\n"
     ]
    }
   ],
   "source": [
    "!ls ../data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "OUTPUT_DATA_PATH=\"../data/can_generated/\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 495,
   "metadata": {},
   "outputs": [],
   "source": [
    "from datetime import datetime,timedelta\n",
    "\n",
    "def current_timestamp():\n",
    "    return int(datetime.now().timestamp()*1000000)\n",
    "\n",
    "def timestamp_to_datetime(ts):\n",
    "    return datetime.fromtimestamp(ts/1000000) +timedelta(microseconds=ts % 1000000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 496,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Event(object):\n",
    "    def __init__(self, timestamp: int):\n",
    "        self.timestamp = timestamp\n",
    "        self.sim = None\n",
    "\n",
    "    def __lt__(self, other):\n",
    "        return self.timestamp < other.timestamp\n",
    "    \n",
    "    def set_sim(self,sim):\n",
    "        self.sim = sim\n",
    "    \n",
    "    def get_sim(self):\n",
    "        return sim\n",
    "        \n",
    "    def entrypoint(self):\n",
    "        pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 497,
   "metadata": {},
   "outputs": [],
   "source": [
    "import heapq\n",
    " \n",
    "class EventQueue:\n",
    "    def __init__(self):\n",
    "        self._queue = []\n",
    "        self._index = 0\n",
    " \n",
    "    def push(self, ev:Event):\n",
    "        heapq.heappush(self._queue, (ev.timestamp, self._index, ev))\n",
    "        self._index += 1\n",
    " \n",
    "    def pop(self):\n",
    "        return heapq.heappop(self._queue)[-1]\n",
    "    \n",
    "    def size(self):\n",
    "        return len(self._queue)\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 498,
   "metadata": {},
   "outputs": [],
   "source": [
    "import heapq\n",
    "    \n",
    "class Simulator:\n",
    "    def __init__(self):\n",
    "        self.q = EventQueue()\n",
    "        self.ts = 0\n",
    "        #self.q.push(MessageEvent(0,'Simulation started'))\n",
    "        self.keep_running = True\n",
    "        \n",
    "    def post_event(self, ev):\n",
    "        ev.set_sim(self)\n",
    "        self.q.push(ev)\n",
    "        \n",
    "    def stop(self):\n",
    "        self.q = EventQueue()\n",
    "        self.keep_running = False\n",
    "        \n",
    "    def get_time(self):\n",
    "        return self.ts\n",
    "    \n",
    "    def run_for(self,dt):\n",
    "        self.ts = current_timestamp()\n",
    "        self.post_event(SimulatorStopEvent(self.ts+dt))\n",
    "        print(\"Running for %d microseconds\" % dt )\n",
    "        print(\"Simulation starting at time\", timestamp_to_datetime(self.ts) )\n",
    "        while self.keep_running:\n",
    "            while self.q.size() > 0:\n",
    "                ev=self.q.pop()\n",
    "                if ev.timestamp is 0:\n",
    "                    ev.timestamp = self.ts\n",
    "                elif ev.timestamp < self.ts:\n",
    "                    raise ValueError(\"Event timestamp is old %d\" % ev.timestamp)\n",
    "                self.ts = ev.timestamp\n",
    "                ev.entrypoint()       \n",
    "        print(\"Simulation ended at time\", timestamp_to_datetime(self.ts) )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 499,
   "metadata": {},
   "outputs": [],
   "source": [
    "class SimulatorMessageEvent(Event):\n",
    "\n",
    "    def __init__(self, timestamp, message):\n",
    "        Event.__init__(self,timestamp)\n",
    "        self.message = message\n",
    "        \n",
    "    def entrypoint(self):\n",
    "        print(self.message)\n",
    "        pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 500,
   "metadata": {},
   "outputs": [],
   "source": [
    "class SimulatorStopEvent(Event):\n",
    "\n",
    "    def __init__(self, timestamp):\n",
    "        Event.__init__(self,timestamp)\n",
    "        \n",
    "    def entrypoint(self):\n",
    "        self.get_sim().stop()\n",
    "        pass"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### CAN Models"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 501,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "def encode_canid(priority,function,subfunction, node_id):\n",
    "    return (priority<<24)|(function<<16)|(subfunction<<8)|node_id\n",
    "\n",
    "def decode_canid(canid):\n",
    "    return (canid>>24)&0xFF, (canid>>16)&0xFF, (canid>>8)&0xFF,canid&0xFF\n",
    "\n",
    "\n",
    "class CANMessage:\n",
    "    def __init__(self, canid, payload):\n",
    "        self.canid = canid\n",
    "        self.payload = payload\n",
    "        \n",
    "    def __str__(self):\n",
    "        tmp = \"0x%02x,0x%02x,0x%02x,0x%02x,%d,\" % (*decode_canid(self.canid),len(self.payload)) \n",
    "        for x in self.payload:\n",
    "            tmp += \"0x%02X,\" % x\n",
    "        tmp += \"0x00,\" *(8-len(self.payload))\n",
    "        return tmp\n",
    "\n",
    "class CANReceiveMessageEvent(Event):\n",
    "\n",
    "    def __init__(self, timestamp, msg, bus):\n",
    "        Event.__init__(self,timestamp)\n",
    "        self.msg = msg\n",
    "        self.bus = bus\n",
    "        \n",
    "    def entrypoint(self):        \n",
    "        self.bus.handle_msg(self.timestamp,self.msg)\n",
    "\n",
    "class CANSendMessageEvent(Event):\n",
    "    TRANSMISSION_TIME_IN_US = 10\n",
    "\n",
    "    def __init__(self, timestamp, msg, bus):\n",
    "        Event.__init__(self,timestamp)\n",
    "        self.msg=msg\n",
    "        self.bus = bus\n",
    "        \n",
    "    def entrypoint(self):\n",
    "        self.get_sim().post_event(\n",
    "            CANReceiveMessageEvent(self.timestamp+self.TRANSMISSION_TIME_IN_US,self.msg, self.bus))\n",
    "        \n",
    "class CANMessageHandler:\n",
    "    def __init__(self):\n",
    "        pass\n",
    "    def handle_msg(self,timestamp,msg):\n",
    "        pass\n",
    "        \n",
    "        \n",
    "class CANBusModel(CANMessageHandler):\n",
    "    def __init__(self,sim):\n",
    "        CANMessageHandler.__init__(self)\n",
    "        self.handlers = []\n",
    "        self.sim = sim\n",
    "    \n",
    "    def connect(self, handler):\n",
    "        self.handlers.append(handler)\n",
    "        \n",
    "    def transmit(self,msg,jitter=0):\n",
    "        sim.post_event(\n",
    "            CANSendMessageEvent(\n",
    "                self.sim.get_time()+jitter, msg, self)\n",
    "        )\n",
    "        \n",
    "    \n",
    "    def handle_msg(self,timestamp,msg):\n",
    "        for h in self.handlers:\n",
    "            h.handle_msg(timestamp,msg)           "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Some monitors"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 502,
   "metadata": {},
   "outputs": [],
   "source": [
    "class CANMessagePrinter(CANMessageHandler):\n",
    "    def __init__(self):\n",
    "        CANMessageHandler.__init__(self)\n",
    "        pass\n",
    "    \n",
    "    def handle_msg(self,timestamp,msg):\n",
    "        print(\"%d,MSG_RX,%s\" % (timestamp,msg))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 503,
   "metadata": {},
   "outputs": [],
   "source": [
    "class CANMessageCSVLogger(CANMessageHandler):\n",
    "    def __init__(self):\n",
    "        CANMessageHandler.__init__(self)        \n",
    "        pass\n",
    "    \n",
    "    def open_file(self,filename):\n",
    "        self.fp = open(filename, 'w')\n",
    "        self.fp.write(\"timestamp,event_type,priority,function,subfunction,node_id,len,d0,d1,d2,d3,d4,d5,d6,d7,\\n\")\n",
    "        \n",
    "    def close_file(self):\n",
    "        self.fp.close()\n",
    "    \n",
    "    def handle_msg(self,timestamp,msg):\n",
    "        self.fp.write(\"%d,MSG_RX,%s\\n\" % (timestamp,msg))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### CAN Master Sync Node"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 504,
   "metadata": {},
   "outputs": [],
   "source": [
    "MASTER_SYNC_FUNCTION = 0xF0\n",
    "MASTER_SYNC_SUBFUNCTION = 0xF1\n",
    "MASTER_SYNC_NODE = 0x34\n",
    "PTU_INTERVAL_IN_US = 50000\n",
    "SYN_MSG_JITTER_IN_US = 3\n",
    "\n",
    "\n",
    "class CANMasterSyncEvent(Event):\n",
    "    \n",
    "    def __init__(self, timestamp, bus):\n",
    "        Event.__init__(self,timestamp)\n",
    "        self.bus = bus\n",
    "        self.current_ptu = 0\n",
    "        \n",
    "    def entrypoint(self):\n",
    "        sim.post_event(\n",
    "            CANSendMessageEvent(self.timestamp,\n",
    "                CANMessage(\n",
    "                    encode_canid(0,MASTER_SYNC_FUNCTION,MASTER_SYNC_SUBFUNCTION,MASTER_SYNC_NODE),\n",
    "                    [ 0, self.current_ptu ]\n",
    "                )\n",
    "                , self.bus      \n",
    "            )\n",
    "        )\n",
    "        self.timestamp += PTU_INTERVAL_IN_US + np.random.randint(-SYN_MSG_JITTER_IN_US, SYN_MSG_JITTER_IN_US)\n",
    "        self.current_ptu = self.current_ptu + 1\n",
    "        if self.current_ptu == 20:\n",
    "            self.current_ptu = 0\n",
    "        self.sim.post_event(self)\n",
    "        \n",
    "class CANMasterSyncNode:\n",
    "    \n",
    "    def __init__(self,sim, bus):\n",
    "        self.sim = sim        \n",
    "        self.bus = bus\n",
    "        \n",
    "    def start(self):\n",
    "        sim.post_event( CANMasterSyncEvent(0, self.bus) )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### CAN Slave Node"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 518,
   "metadata": {},
   "outputs": [],
   "source": [
    "SLAVE1_FUNCTION = 0xF4\n",
    "SLAVE1_TM1_SUBFUNCTION = 0xD0\n",
    "SLAVE1_NODE = 0x10\n",
    "SLAVE_MSG_JITTER_IN_US = 3\n",
    "\n",
    "\n",
    "class CANSlaveNode:\n",
    "    \n",
    "    def __init__(self,sim, bus, success_threeshold=0):\n",
    "        self.sim = sim        \n",
    "        self.bus = bus\n",
    "        self.success_threeshold = success_threeshold\n",
    "        self.fn_table = {\n",
    "            # Function\n",
    "            MASTER_SYNC_FUNCTION: {\n",
    "                MASTER_SYNC_SUBFUNCTION: self.handle_sync\n",
    "            }\n",
    "        }\n",
    "        \n",
    "    def set_success_threeshold(self,success_threeshold):\n",
    "        self.success_threeshold = success_threeshold\n",
    "        \n",
    "    def handle_sync(self,timestamp,msg):\n",
    "        success = np.random.randint(0,100)\n",
    "        if success >= self.success_threeshold:\n",
    "            self.bus.transmit(\n",
    "                CANMessage(\n",
    "                    encode_canid(1,SLAVE1_FUNCTION,SLAVE1_TM1_SUBFUNCTION,SLAVE1_NODE),\n",
    "                    #[0xFE,0xDE,0xBE,0xBE,0xCA,0xFE]\n",
    "                    [0x11,0x2E,0x4E]\n",
    "                 ),\n",
    "                 np.random.randint(0, SLAVE_MSG_JITTER_IN_US)\n",
    "            )\n",
    "        \n",
    "    def handle_msg(self,timestamp,msg):\n",
    "        priority,function,subfunction, node_id = decode_canid(msg.canid)        \n",
    "        if function in self.fn_table:\n",
    "            if subfunction in self.fn_table[function]:\n",
    "                self.fn_table[function][subfunction](timestamp,msg)\n",
    "           "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Simulation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 506,
   "metadata": {},
   "outputs": [],
   "source": [
    "TOTAL_SIMULATION_TIME_IN_SECONDS = 10\n",
    "CSV_FILENAME_GOOD = OUTPUT_DATA_PATH+\"%d_second_master_and_slave.csv\" % TOTAL_SIMULATION_TIME_IN_SECONDS\n",
    "CSV_FILENAME_BAD = OUTPUT_DATA_PATH+\"%d_second_master_and_slave_broken.csv\" % TOTAL_SIMULATION_TIME_IN_SECONDS"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 507,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Running for 10000000 microseconds\n",
      "Simulation starting at time 2020-03-16 00:19:11.666382\n",
      "Simulation ended at time 2020-03-16 00:19:21.666382\n"
     ]
    }
   ],
   "source": [
    "sim = Simulator()\n",
    "\n",
    "# Define CAN Network\n",
    "canbus = CANBusModel(sim)\n",
    "\n",
    "can_master = CANMasterSyncNode(sim,canbus)\n",
    "can_slave = CANSlaveNode(sim,canbus)\n",
    "canbus.connect( can_slave )\n",
    "\n",
    "# Monitors\n",
    "csv_logger =  CANMessageCSVLogger()\n",
    "csv_logger.open_file(CSV_FILENAME_GOOD)\n",
    "canbus.connect( csv_logger )\n",
    "\n",
    "# Simulate\n",
    "can_master.start()\n",
    "sim.run_for( TOTAL_SIMULATION_TIME_IN_SECONDS *1000000 )\n",
    "csv_logger.close_file()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 519,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Running for 10000000 microseconds\n",
      "Simulation starting at time 2020-03-16 00:27:25.593772\n",
      "Simulation ended at time 2020-03-16 00:27:35.593772\n"
     ]
    }
   ],
   "source": [
    "sim = Simulator()\n",
    "\n",
    "# Define CAN Network\n",
    "canbus = CANBusModel(sim)\n",
    "\n",
    "can_master = CANMasterSyncNode(sim,canbus)\n",
    "can_slave = CANSlaveNode(sim,canbus,50)\n",
    "canbus.connect( can_slave )\n",
    "\n",
    "# Monitors\n",
    "csv_logger =  CANMessageCSVLogger()\n",
    "csv_logger.open_file(CSV_FILENAME_BAD)\n",
    "canbus.connect( csv_logger )\n",
    "\n",
    "# Simulate\n",
    "can_master.start()\n",
    "sim.run_for( TOTAL_SIMULATION_TIME_IN_SECONDS *1000000 )\n",
    "csv_logger.close_file()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 520,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 521,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>timestamp</th>\n",
       "      <th>event_type</th>\n",
       "      <th>priority</th>\n",
       "      <th>function</th>\n",
       "      <th>subfunction</th>\n",
       "      <th>node_id</th>\n",
       "      <th>len</th>\n",
       "      <th>d0</th>\n",
       "      <th>d1</th>\n",
       "      <th>d2</th>\n",
       "      <th>d3</th>\n",
       "      <th>d4</th>\n",
       "      <th>d5</th>\n",
       "      <th>d6</th>\n",
       "      <th>d7</th>\n",
       "      <th>Unnamed: 15</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1584318444796896</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1584318444796906</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x01</td>\n",
       "      <td>0xf4</td>\n",
       "      <td>0xd0</td>\n",
       "      <td>0x10</td>\n",
       "      <td>3</td>\n",
       "      <td>0x11</td>\n",
       "      <td>0x2E</td>\n",
       "      <td>0x4E</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1584318444846897</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x01</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1584318444896894</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x02</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1584318444896905</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x01</td>\n",
       "      <td>0xf4</td>\n",
       "      <td>0xd0</td>\n",
       "      <td>0x10</td>\n",
       "      <td>3</td>\n",
       "      <td>0x11</td>\n",
       "      <td>0x2E</td>\n",
       "      <td>0x4E</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>1584318444946896</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x03</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>1584318444996894</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x04</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>1584318445046893</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x05</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>1584318445096891</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x06</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>1584318445146890</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x07</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>1584318445146900</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x01</td>\n",
       "      <td>0xf4</td>\n",
       "      <td>0xd0</td>\n",
       "      <td>0x10</td>\n",
       "      <td>3</td>\n",
       "      <td>0x11</td>\n",
       "      <td>0x2E</td>\n",
       "      <td>0x4E</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>1584318445196888</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x08</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>1584318445246885</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x09</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>1584318445246896</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x01</td>\n",
       "      <td>0xf4</td>\n",
       "      <td>0xd0</td>\n",
       "      <td>0x10</td>\n",
       "      <td>3</td>\n",
       "      <td>0x11</td>\n",
       "      <td>0x2E</td>\n",
       "      <td>0x4E</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>1584318445296887</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x0A</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>1584318445296897</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x01</td>\n",
       "      <td>0xf4</td>\n",
       "      <td>0xd0</td>\n",
       "      <td>0x10</td>\n",
       "      <td>3</td>\n",
       "      <td>0x11</td>\n",
       "      <td>0x2E</td>\n",
       "      <td>0x4E</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>1584318445346884</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x0B</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>1584318445346895</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x01</td>\n",
       "      <td>0xf4</td>\n",
       "      <td>0xd0</td>\n",
       "      <td>0x10</td>\n",
       "      <td>3</td>\n",
       "      <td>0x11</td>\n",
       "      <td>0x2E</td>\n",
       "      <td>0x4E</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>1584318445396882</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x0C</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>1584318445446880</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x0D</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>1584318445446892</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x01</td>\n",
       "      <td>0xf4</td>\n",
       "      <td>0xd0</td>\n",
       "      <td>0x10</td>\n",
       "      <td>3</td>\n",
       "      <td>0x11</td>\n",
       "      <td>0x2E</td>\n",
       "      <td>0x4E</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>1584318445496878</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x0E</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>1584318445496889</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x01</td>\n",
       "      <td>0xf4</td>\n",
       "      <td>0xd0</td>\n",
       "      <td>0x10</td>\n",
       "      <td>3</td>\n",
       "      <td>0x11</td>\n",
       "      <td>0x2E</td>\n",
       "      <td>0x4E</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>1584318445546875</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x0F</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>1584318445596872</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x10</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>1584318445646873</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x11</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>1584318445696875</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x12</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>1584318445746872</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x13</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>1584318445746884</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x01</td>\n",
       "      <td>0xf4</td>\n",
       "      <td>0xd0</td>\n",
       "      <td>0x10</td>\n",
       "      <td>3</td>\n",
       "      <td>0x11</td>\n",
       "      <td>0x2E</td>\n",
       "      <td>0x4E</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>1584318445796871</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>279</th>\n",
       "      <td>1584318453846849</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x01</td>\n",
       "      <td>0xf4</td>\n",
       "      <td>0xd0</td>\n",
       "      <td>0x10</td>\n",
       "      <td>3</td>\n",
       "      <td>0x11</td>\n",
       "      <td>0x2E</td>\n",
       "      <td>0x4E</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>280</th>\n",
       "      <td>1584318453896840</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x02</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>281</th>\n",
       "      <td>1584318453896852</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x01</td>\n",
       "      <td>0xf4</td>\n",
       "      <td>0xd0</td>\n",
       "      <td>0x10</td>\n",
       "      <td>3</td>\n",
       "      <td>0x11</td>\n",
       "      <td>0x2E</td>\n",
       "      <td>0x4E</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>282</th>\n",
       "      <td>1584318453946840</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x03</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>283</th>\n",
       "      <td>1584318453996838</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x04</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>284</th>\n",
       "      <td>1584318453996848</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x01</td>\n",
       "      <td>0xf4</td>\n",
       "      <td>0xd0</td>\n",
       "      <td>0x10</td>\n",
       "      <td>3</td>\n",
       "      <td>0x11</td>\n",
       "      <td>0x2E</td>\n",
       "      <td>0x4E</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>285</th>\n",
       "      <td>1584318454046838</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x05</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>286</th>\n",
       "      <td>1584318454096838</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x06</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>287</th>\n",
       "      <td>1584318454146837</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x07</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>288</th>\n",
       "      <td>1584318454146847</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x01</td>\n",
       "      <td>0xf4</td>\n",
       "      <td>0xd0</td>\n",
       "      <td>0x10</td>\n",
       "      <td>3</td>\n",
       "      <td>0x11</td>\n",
       "      <td>0x2E</td>\n",
       "      <td>0x4E</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>289</th>\n",
       "      <td>1584318454196834</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x08</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>290</th>\n",
       "      <td>1584318454246836</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x09</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>291</th>\n",
       "      <td>1584318454246846</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x01</td>\n",
       "      <td>0xf4</td>\n",
       "      <td>0xd0</td>\n",
       "      <td>0x10</td>\n",
       "      <td>3</td>\n",
       "      <td>0x11</td>\n",
       "      <td>0x2E</td>\n",
       "      <td>0x4E</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>292</th>\n",
       "      <td>1584318454296838</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x0A</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>293</th>\n",
       "      <td>1584318454296848</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x01</td>\n",
       "      <td>0xf4</td>\n",
       "      <td>0xd0</td>\n",
       "      <td>0x10</td>\n",
       "      <td>3</td>\n",
       "      <td>0x11</td>\n",
       "      <td>0x2E</td>\n",
       "      <td>0x4E</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>294</th>\n",
       "      <td>1584318454346836</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x0B</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>295</th>\n",
       "      <td>1584318454396833</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x0C</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>296</th>\n",
       "      <td>1584318454446830</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x0D</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>297</th>\n",
       "      <td>1584318454496832</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x0E</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>298</th>\n",
       "      <td>1584318454496844</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x01</td>\n",
       "      <td>0xf4</td>\n",
       "      <td>0xd0</td>\n",
       "      <td>0x10</td>\n",
       "      <td>3</td>\n",
       "      <td>0x11</td>\n",
       "      <td>0x2E</td>\n",
       "      <td>0x4E</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>299</th>\n",
       "      <td>1584318454546830</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x0F</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>300</th>\n",
       "      <td>1584318454596830</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x10</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>301</th>\n",
       "      <td>1584318454596841</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x01</td>\n",
       "      <td>0xf4</td>\n",
       "      <td>0xd0</td>\n",
       "      <td>0x10</td>\n",
       "      <td>3</td>\n",
       "      <td>0x11</td>\n",
       "      <td>0x2E</td>\n",
       "      <td>0x4E</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>302</th>\n",
       "      <td>1584318454646831</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x11</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>303</th>\n",
       "      <td>1584318454696829</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x12</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>304</th>\n",
       "      <td>1584318454696841</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x01</td>\n",
       "      <td>0xf4</td>\n",
       "      <td>0xd0</td>\n",
       "      <td>0x10</td>\n",
       "      <td>3</td>\n",
       "      <td>0x11</td>\n",
       "      <td>0x2E</td>\n",
       "      <td>0x4E</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>305</th>\n",
       "      <td>1584318454746826</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x13</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>306</th>\n",
       "      <td>1584318454746837</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x01</td>\n",
       "      <td>0xf4</td>\n",
       "      <td>0xd0</td>\n",
       "      <td>0x10</td>\n",
       "      <td>3</td>\n",
       "      <td>0x11</td>\n",
       "      <td>0x2E</td>\n",
       "      <td>0x4E</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>307</th>\n",
       "      <td>1584318454796825</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0xf0</td>\n",
       "      <td>0xf1</td>\n",
       "      <td>0x34</td>\n",
       "      <td>2</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>308</th>\n",
       "      <td>1584318454796837</td>\n",
       "      <td>MSG_RX</td>\n",
       "      <td>0x01</td>\n",
       "      <td>0xf4</td>\n",
       "      <td>0xd0</td>\n",
       "      <td>0x10</td>\n",
       "      <td>3</td>\n",
       "      <td>0x11</td>\n",
       "      <td>0x2E</td>\n",
       "      <td>0x4E</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>0x00</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>309 rows × 16 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "            timestamp event_type priority function subfunction node_id  len  \\\n",
       "0    1584318444796896     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "1    1584318444796906     MSG_RX     0x01     0xf4        0xd0    0x10    3   \n",
       "2    1584318444846897     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "3    1584318444896894     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "4    1584318444896905     MSG_RX     0x01     0xf4        0xd0    0x10    3   \n",
       "5    1584318444946896     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "6    1584318444996894     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "7    1584318445046893     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "8    1584318445096891     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "9    1584318445146890     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "10   1584318445146900     MSG_RX     0x01     0xf4        0xd0    0x10    3   \n",
       "11   1584318445196888     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "12   1584318445246885     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "13   1584318445246896     MSG_RX     0x01     0xf4        0xd0    0x10    3   \n",
       "14   1584318445296887     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "15   1584318445296897     MSG_RX     0x01     0xf4        0xd0    0x10    3   \n",
       "16   1584318445346884     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "17   1584318445346895     MSG_RX     0x01     0xf4        0xd0    0x10    3   \n",
       "18   1584318445396882     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "19   1584318445446880     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "20   1584318445446892     MSG_RX     0x01     0xf4        0xd0    0x10    3   \n",
       "21   1584318445496878     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "22   1584318445496889     MSG_RX     0x01     0xf4        0xd0    0x10    3   \n",
       "23   1584318445546875     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "24   1584318445596872     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "25   1584318445646873     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "26   1584318445696875     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "27   1584318445746872     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "28   1584318445746884     MSG_RX     0x01     0xf4        0xd0    0x10    3   \n",
       "29   1584318445796871     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "..                ...        ...      ...      ...         ...     ...  ...   \n",
       "279  1584318453846849     MSG_RX     0x01     0xf4        0xd0    0x10    3   \n",
       "280  1584318453896840     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "281  1584318453896852     MSG_RX     0x01     0xf4        0xd0    0x10    3   \n",
       "282  1584318453946840     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "283  1584318453996838     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "284  1584318453996848     MSG_RX     0x01     0xf4        0xd0    0x10    3   \n",
       "285  1584318454046838     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "286  1584318454096838     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "287  1584318454146837     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "288  1584318454146847     MSG_RX     0x01     0xf4        0xd0    0x10    3   \n",
       "289  1584318454196834     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "290  1584318454246836     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "291  1584318454246846     MSG_RX     0x01     0xf4        0xd0    0x10    3   \n",
       "292  1584318454296838     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "293  1584318454296848     MSG_RX     0x01     0xf4        0xd0    0x10    3   \n",
       "294  1584318454346836     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "295  1584318454396833     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "296  1584318454446830     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "297  1584318454496832     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "298  1584318454496844     MSG_RX     0x01     0xf4        0xd0    0x10    3   \n",
       "299  1584318454546830     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "300  1584318454596830     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "301  1584318454596841     MSG_RX     0x01     0xf4        0xd0    0x10    3   \n",
       "302  1584318454646831     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "303  1584318454696829     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "304  1584318454696841     MSG_RX     0x01     0xf4        0xd0    0x10    3   \n",
       "305  1584318454746826     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "306  1584318454746837     MSG_RX     0x01     0xf4        0xd0    0x10    3   \n",
       "307  1584318454796825     MSG_RX     0x00     0xf0        0xf1    0x34    2   \n",
       "308  1584318454796837     MSG_RX     0x01     0xf4        0xd0    0x10    3   \n",
       "\n",
       "       d0    d1    d2    d3    d4    d5    d6    d7  Unnamed: 15  \n",
       "0    0x00  0x00  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "1    0x11  0x2E  0x4E  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "2    0x00  0x01  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "3    0x00  0x02  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "4    0x11  0x2E  0x4E  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "5    0x00  0x03  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "6    0x00  0x04  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "7    0x00  0x05  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "8    0x00  0x06  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "9    0x00  0x07  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "10   0x11  0x2E  0x4E  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "11   0x00  0x08  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "12   0x00  0x09  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "13   0x11  0x2E  0x4E  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "14   0x00  0x0A  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "15   0x11  0x2E  0x4E  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "16   0x00  0x0B  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "17   0x11  0x2E  0x4E  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "18   0x00  0x0C  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "19   0x00  0x0D  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "20   0x11  0x2E  0x4E  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "21   0x00  0x0E  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "22   0x11  0x2E  0x4E  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "23   0x00  0x0F  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "24   0x00  0x10  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "25   0x00  0x11  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "26   0x00  0x12  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "27   0x00  0x13  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "28   0x11  0x2E  0x4E  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "29   0x00  0x00  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "..    ...   ...   ...   ...   ...   ...   ...   ...          ...  \n",
       "279  0x11  0x2E  0x4E  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "280  0x00  0x02  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "281  0x11  0x2E  0x4E  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "282  0x00  0x03  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "283  0x00  0x04  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "284  0x11  0x2E  0x4E  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "285  0x00  0x05  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "286  0x00  0x06  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "287  0x00  0x07  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "288  0x11  0x2E  0x4E  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "289  0x00  0x08  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "290  0x00  0x09  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "291  0x11  0x2E  0x4E  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "292  0x00  0x0A  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "293  0x11  0x2E  0x4E  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "294  0x00  0x0B  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "295  0x00  0x0C  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "296  0x00  0x0D  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "297  0x00  0x0E  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "298  0x11  0x2E  0x4E  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "299  0x00  0x0F  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "300  0x00  0x10  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "301  0x11  0x2E  0x4E  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "302  0x00  0x11  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "303  0x00  0x12  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "304  0x11  0x2E  0x4E  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "305  0x00  0x13  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "306  0x11  0x2E  0x4E  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "307  0x00  0x00  0x00  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "308  0x11  0x2E  0x4E  0x00  0x00  0x00  0x00  0x00          NaN  \n",
       "\n",
       "[309 rows x 16 columns]"
      ]
     },
     "execution_count": 521,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.read_csv(CSV_FILENAME_BAD)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
